package com.arpa.wms.service;

import com.arpa.ntocc.common.domain.vo.TreeData;
import com.arpa.wms.domain.entity.GoodsType;
import com.arpa.wms.domain.vo.GoodsTypeVOList;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qimen.api.request.ItemsSynchronizeRequest;
import com.qimen.api.request.SingleitemSynchronizeRequest;

import java.util.List;

/**
 * @author: Allen chen
 * @Date 2020/8/15
 * @Description:
 */
public interface IGoodsTypeService extends IService<GoodsType> {

     /**
      *  @author: Allen chen
      *  @Date: 2020/8/21 16:20
      *  @Description: 查询列表
      */
     GoodsTypeVOList queryList(GoodsType goodsType);

    @Override
    boolean save(GoodsType goodsType);

    int updateByCode(GoodsType goodsType);

     /**
      *  @author: Allen chen
      *  @Date: 2020/8/21 16:21
      *  @Description: 删除类别（包含子数据）
      */
    int delGoodsTypeWithChild(GoodsType goodsType);

      /**
       *  @author: Allen chen
       *  @Date: 2020/9/1 14:13
       *  @Description: 根据codes查询商品分类
       */
     List<GoodsType> getListByCodes(List<String> codes);

      /**
       *  @author: Allen chen
       *  @Date: 2020/9/21 17:04
       *  @Description: 根据父节点查询子节点列表
       */
      List<GoodsType> getByCodeOrParentCode(String code,String shipmentCode);


    /**
     * 获取货主商品分类
     * @param shipmentCode
     * @return
     */
    List<TreeData> findByShipmentCode(String shipmentCode);

    void removeByCode(String code);

    /**
     *
     * @param typeCodes
     * @param parentCode
     * @param shipmentCode
     */
    void listByShipmentCode(List<String> typeCodes, String parentCode, String shipmentCode);

    /**
     * 查询商品分类下的子节点数量
     * @param parentCode
     * @return
     */
    int countChildren(String parentCode);

    /**
     * 同步商品时，根据操作类型判断是插入还是更新
     *
     * @param request
     */
    void batchGoodsTypeSave(ItemsSynchronizeRequest request);

    /**
     * 同步单个商品时，根据操作类型判断是插入还是更新
     *
     * @param request
     */
    void singleGoodsTypeSave(SingleitemSynchronizeRequest request);
}
